<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Session;

/**
 * 会员接口
 */
class Task extends Api
{
    protected $noNeedLogin = ['TaskURStatus', 'TaskORStatus','getOrderCount','sendUserAdmin'];
    protected $noNeedRight = '*';
    protected $hid = null;
    protected $adminId = null;

    public function _initialize()
    {
        parent::_initialize();

        $this->hid = Session::get("admin")["hotelid"];
        $this->adminId = Session::get("admin")["id"];
    }

    /**
     * 定时任务1 执行更新房源状态
     * 将房源根据预定的时间 自动更新为 不可预定 状态
     * 只要将可预定房间的时间改成当前时间 即可 当用户退房后，则将可预定时间放开
     */
    public function TaskURStatus()
    {
        try{
            $time = time();
            $where["beforeTime"] = array("lt",$time);

            //判断订单表是否有下个预定 如果有 时间为下一个订房时间前两个小时，如果没有,beforeTime则为空
            $house = db("house");
            $houselist = $house->where("h_statusText = 'normal' and beforeTime <> ''")->where($where)->field("id,h_statusText,beforeTime")->select();

            $order =  db("order");
            foreach ($houselist as $v){
                //如果订单里只有一个在预约中的 那么这个时间就是和房间预约的时间是一个人
               $orderList = $order->where(["room_id"=>$v["id"],"pay_status"=>1])->field("stime")->order("stime asc")->select();
               $len = count($orderList);
               if($len < 2 ){
                   $rdata["h_statusText"] = "reserve";
                   $rdata["updatetime"] = time();
                   $rdata["beforeTime"] = Null;
               }else{
                   $rdata["h_statusText"] = "reserve";
                   $rdata["updatetime"] = time();
                   $rdata["beforeTime"] = $orderList[1]["stime"] - 7200;
               }

                $houseRes = $house->where(["id"=>$v["id"]])->update($rdata);
                file_put_contents("autoHouseStatusSuccess.json",date("Y-m-d H:i:s")."执行成功，影响数量：".$houseRes.PHP_EOL, FILE_APPEND);

            }
            return "success";

        }catch (\think\exception\PDOException $e){

            file_put_contents("autoHouseStatusError.json",date("Y-m-d H:i:s")."执行成功，影响数量：".$e->getMessage().PHP_EOL, FILE_APPEND);
        }

    }


    /**
     * 定时任务2 执行更新订单状态 未支付 金额回退 写入数据 不走微信退款，无真实金额交易
     * 将未支付的订单在规定时间内未支付自动修改为已取消
     */
    public function TaskORStatus()
    {
        try{
            $time = time();
            $where["pay_status"] = 0;
            $where["payend_time"] = array("lt",$time);
            $order = db("order");
            $orderList = $order->where($where)->select();
            if($orderList){
                foreach ($orderList as $v){
                    $upd["upd_time"] = time();
                    $upd["cancel_time"] = time();
                    $upd["pay_status"] = 4;
                    $upd["return_money"] = $v['all_money'];

                    $res = $order->where(["id"=>$v["id"]])->update($upd);
                    file_put_contents("autoPayCancelSuccess.json",date("Y-m-d H:i:s")."执行成功，影响数量：".$res.PHP_EOL, FILE_APPEND);
                }

            }

            return "success";
        }catch (\think\exception\PDOException $e){
            file_put_contents("autoPayCancelError.json",date("Y-m-d H:i:s")."执行成功，影响数量：".$e->getMessage().PHP_EOL, FILE_APPEND);
        }
    }

    /**
     * 定时任务3 房费到期提醒，发送给用户和酒店配置的手机
     * 将未支付的订单在规定时间内未支付自动修改为已取消
     */
    public function sendUserAdmin(){
        try{
            $time = time();
            $where["pay_status"] = 2;
            $where["sendmsg_time"] = array("lt",$time);
            $where["sendmsg_flag"] = 0;//未发送
            $order = db("order");
            $orderList = $order->where($where)->select();

            if($orderList){
                foreach ($orderList as $v){
                    //发送短信 用户
                    if($v["h_phone"]){
                        $res = sendmsg($v["user_phone"]);
                    }
                    //发送酒店
                    if($v["user_phone"] && $v["user_name"]){
                        $res2 = sendHmsg($v["user_phone"],$v["user_name"]);
                    }

                    $upd["upd_time"] = time();
                    $upd["sendmsg_flag"] = 1;
                    $res3 = $order->where(["id"=>$v["id"]])->update($upd);


                }

            }

            return "success";
        }catch (\think\exception\PDOException $e){
            file_put_contents("autoPayCancelError.json",date("Y-m-d H:i:s")."执行成功，影响数量：".$e->getMessage().PHP_EOL, FILE_APPEND);
        }


    }



    //后台接口 实时获取订单预定数量
    public function getOrderCount(){
        //获取订单未读数据 即：已预定 但未入住订单

        if($this->adminId == 1){
            $count  = db("order")->where("pay_status = 1")->count("id");
        }else{

            $count  = db("order")->where("pay_status = 1")->where('hotelid','in',$this->hid)->count("id");
        }


        return $count;
    }












}
